package edu.gduf.service;
/*
@author qw
@date 2020/10/10 - 22:52
**/

import edu.gduf.domain.Cooperation;
import edu.gduf.domain.ResultInfo;

import javax.servlet.http.HttpSession;

/**
 * 组队模块业务层接口
 */
public interface CooperationService {

    /**
     * 组队信息发布（添加组队信息）
     * @param cooperation 前端表单提交cooperation数据
     * @param httpSession httpSession域
     * @return json数据
     */
    ResultInfo addCooperation(Cooperation cooperation, HttpSession httpSession);

    /**
     * 组队信息单个删除
     * @param coid 组队信息表主键coid
     * @return json数据
     */
    ResultInfo deleteCooperation(Integer coid);

    /**
     * 组队信息批量删除
     * @param coidArray 从复选框中选中的coid数组
     * @return
     */
    ResultInfo BatchDelete(Integer[] coidArray);

    /**
     * 组队信息修改
     * @param cooperation 前端表单提交cooperation修改的数据
     * @return json数据
     */
    ResultInfo updateCooperation(Cooperation cooperation);

    /**
     * 组队信息查询（单条）
     * @param coid 组队信息表主键
     * @return cooperation对象
     */
    Cooperation selectCooperationByCoid(Integer coid);

    /**
     * 组队信息查询（全部-分页）
     * @param currentPageIndex 当前页数下标
     * @return 键值对为页数"pageCount"和组队信息列表"cooperationList"的map
     */
    ResultInfo selectCooperationList(Integer currentPageIndex);

    /**
     * 组队信息查询（根据分类查询）
     * @param cid 查询条件（分类表中的主键id）
     * @return 键值对为页数"pageCount"和符合条件的组队信息列表"cooperationList"的map
     */
    ResultInfo selectCooperationByCid(Integer cid, Integer currentPageIndex);

    /**
     *组队信息查询（根据标题-模糊/精准查询）
     * @param title 组队信息的标题
     * @return 键值对为页数"pageCount"和符合条件的组队信息列表"cooperationList"的map
     */
//    List<Cooperation> selectCooperationByTitle(String title);

    /**
     * 组队信息查询（根据组队要求查询--模糊）
     * @param demand 查询条件（组队要求）
     * @return 键值对为页数"pageCount"和符合条件的组队信息列表"cooperationList"的map
     */
//    List<Cooperation> selectCooperationByDemand(String demand);

    /**
     * 组队信息查询（根据标题或要求--模糊）
     * @param str 查询条件
     * @param currentPageIndex 当前页面值下标
     * @return 键值对为页数"pageCount"和符合条件的组队信息列表"cooperationList"的map
     */
    ResultInfo selectCooperationByCondition(String str, Integer currentPageIndex);

    /**
     * 更新组队状态
     * @param coid 组队信息编号（主键）
     * @return json
     */
    ResultInfo updateStatus(Integer coid);

    /**
     * 更新组队状态（根据组队的截止时间 判断是否停止组队 进行状态修改）
     * @param timeout 时间标识符
     * @param coid 组队信息编号（主键）
     * @return json
     */
    ResultInfo updateStatus(Boolean timeout,Integer coid);

    /**
     * 更新组队人数
     * @param coid 组队信息编号（主键）
     * @return 1-成功 0-失败
     */
    ResultInfo updatePopulation(Integer coid, String username);


    ResultInfo selectCooperationByUid(HttpSession session, Integer currentPageIndex);

    /**
     * 统计组队信息作者的发布数
     * @param uid
     * @return
     */
    Integer countByAuthor(Integer uid);
}
